<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="eBiUe" id="eBiUe"><span data-lake-id="u700d5362" id="u700d5362">典型回答</span></h1>
  <p data-lake-id="u1918c06f" id="u1918c06f"><br></p>
  <p data-lake-id="ud4132e8b" id="ud4132e8b"><span data-lake-id="u4162fe32" id="u4162fe32">设计模式是软件设计中常用的解决方案，它们有助于构建可重用、可维护和可扩展的代码。在设计模式中，有七个基本原则，它们提供了指导设计的准则和原则。</span></p>
  <p data-lake-id="u67a1106f" id="u67a1106f"><span data-lake-id="u5f3fe4df" id="u5f3fe4df">​</span><br></p>
  <p data-lake-id="ude8871d0" id="ude8871d0"><span data-lake-id="u6131550e" id="u6131550e">设计模式的7大基本原则中，有5个来源于面向对象的5大基本原则，他们分别是：</span></p>
  <p data-lake-id="u84fa3a3e" id="u84fa3a3e"><br></p>
  <p data-lake-id="uf3ba8e08" id="uf3ba8e08"><strong><span data-lake-id="u17038d34" id="u17038d34">单一职责原则（Single Responsibility Principle，SRP）</span></strong><span data-lake-id="u08fa334a" id="u08fa334a">：一个类应该只有一个引起变化的原因。换句话说，一个类应该只做一件事。这个原则鼓励将功能分解为小的、独立的单元，每个单元只负责一件事情。</span></p>
  <p data-lake-id="uf93dcda3" id="uf93dcda3"><br></p>
  <p data-lake-id="ud4e99f48" id="ud4e99f48"><strong><span data-lake-id="u6f7837fd" id="u6f7837fd">开放封闭原则（Open/Closed Principle，OCP）</span></strong><span data-lake-id="u045aac2e" id="u045aac2e">：软件实体（类、模块、函数等）应该对扩展是开放的，而对修改是关闭的。这意味着应该通过扩展现有代码来引入新功能，而不是直接修改已有的代码。</span></p>
  <p data-lake-id="u3ff531f7" id="u3ff531f7"><span data-lake-id="u19fca974" id="u19fca974">​</span><br></p>
  <p data-lake-id="ud120b1e2" id="ud120b1e2"><strong><span data-lake-id="u48f31524" id="u48f31524">里氏替换原则（Liskov Substitution Principle，LSP）</span></strong><span data-lake-id="ucb79aa81" id="ucb79aa81">：任何一个父类出现的地方，都可以用它的子类来替代，而不会导致程序的错误或异常。这个原则强调继承关系的正确使用，子类应该能够完全替代父类而不引发意外行为。</span></p>
  <p data-lake-id="ubd1b9fe6" id="ubd1b9fe6"><br></p>
  <p data-lake-id="u8872a3ab" id="u8872a3ab"><strong><span data-lake-id="u541d3a2f" id="u541d3a2f">依赖倒置原则（Dependency Inversion Principle，DIP）</span></strong><span data-lake-id="ub6a48fa5" id="ub6a48fa5">：高层模块不应该依赖于低层模块，二者都应该依赖于抽象。这要求我们写出来的程序要依赖于抽象接口，而不是具体的实现。这个原则通过引入抽象接口或抽象类，将高层模块与低层模块解耦。</span></p>
  <p data-lake-id="u39a29d51" id="u39a29d51"><span data-lake-id="u11b3f7a7" id="u11b3f7a7">​</span><br></p>
  <p data-lake-id="u1c858665" id="u1c858665"><strong><span data-lake-id="u8cc27724" id="u8cc27724">接口隔离原则（Interface Segregation Principle，ISP）</span></strong><span data-lake-id="u3454124e" id="u3454124e">：客户端不应该依赖于它不需要使用的接口。一个类不应该强迫它的客户端依赖于它们不需要的方法。接口应该小而专注，不应该包含多余的方法。这要求我们要使用多个小的专门的接口，而不要使用一个大的总接口。</span></p>
  <p data-lake-id="u77c4cc0a" id="u77c4cc0a"><span data-lake-id="ub224d8c1" id="ub224d8c1">​</span><br></p>
  <p data-lake-id="u561ca8dc" id="u561ca8dc"><span data-lake-id="u8687695a" id="u8687695a">除了这5大基本原则以外，在设计模式中，还有2个原则需要我们遵守的。那就是：</span></p>
  <p data-lake-id="u944394b6" id="u944394b6"><span data-lake-id="u0a264758" id="u0a264758">​</span><br></p>
  <p data-lake-id="ua6ed15b3" id="ua6ed15b3"><strong><span data-lake-id="u408cb277" id="u408cb277">迪米特法则（Law of Demeter，LoD）</span></strong><span data-lake-id="u6efb12c2" id="u6efb12c2">：一个对象应该对其他对象有最少的了解。对象之间应该保持松耦合。这个原则鼓励将复杂系统分解为许多小的、相对独立的模块，模块之间的交互通过最少的接口进行。</span></p>
  <p data-lake-id="ube5f9911" id="ube5f9911"><span data-lake-id="u4e304ecf" id="u4e304ecf">​</span><br></p>
  <p data-lake-id="u83103d15" id="u83103d15"><strong><span data-lake-id="u48daaccf" id="u48daaccf">合成/聚合复用原则（Composition/Aggregation Reuse Principle，CARP）</span></strong><span data-lake-id="u3fb0cbc0" id="u3fb0cbc0">：优先使用合成/聚合，而不是继承来实现代码复用。这个原则推崇对象组合和聚合的方式来构建复杂的对象结构，而不是依赖继承。</span></p>
  <p data-lake-id="ub58bccd3" id="ub58bccd3"><span data-lake-id="u753b8991" id="u753b8991">​</span><br></p>
  <p data-lake-id="u70f5137d" id="u70f5137d"><br></p>
  <h4 data-lake-id="pFkEK" id="pFkEK"><span data-lake-id="u5284285c" id="u5284285c">​</span><br></h4>
 </body>
</html>